/*
一个TCP客户端进行TCP通信的流程如下：

	1.建立与服务端的链接
	2.进行数据收发
	3.关闭链接
*/
package main

import (
	"bufio"
	"fmt"
	"net"
	"os"
	"strings"
)

func main() {
	conn, err := net.Dial("tcp", "127.0.0.01:8080")
	if err != nil {
		fmt.Println("拨号错误:", err)
		return
	}
	defer conn.Close() // 关闭连接

	//这是刘老师的方法
	for {
		conn.Write([]byte("lqz"))
		var buf [128]byte
		i, err := conn.Read(buf[:])
		if err != nil {
			fmt.Println("接收数据错误:", err)
		}
		fmt.Println(string(buf[:i]))
	}

	//这是李文周老师的方法，推荐
	inputReader := bufio.NewReader(os.Stdin)
	for {
		input, _ := inputReader.ReadString('\n') // 读取用户输入
		inputInfo := strings.Trim(input, "\r\n")
		if strings.ToUpper(inputInfo) == "Q" { // 如果输入q就退出
			return
		}
		_, err = conn.Write([]byte(inputInfo)) // 发送数据
		if err != nil {
			return
		}
		buf := [512]byte{}
		n, err := conn.Read(buf[:])
		if err != nil {
			fmt.Println("recv failed, err:", err)
			return
		}
		fmt.Println(string(buf[:n]))
	}
}
